package cc.rengu.igas.bsps.common.dao;

import cc.rengu.oltp.service.common.entity.MchntOrderInfo;
import cc.rengu.oltp.service.common.entity.PayOrderInfo;
import cc.rengu.oltp.service.common.entity.TxnCfg;
import cc.rengu.oltp.utility.bean.PageInfo;
import cc.rengu.oltp.utility.bean.PageResult;

import java.util.List;

/**
 * 交易明细信息正式表接口类
 * Created by yuhongwen
 */
public interface TradeDetailInfoMapper {
    /**
     * 根据交易明细信息
     *
     * @param instId 多法人标识
     * @return 交易明细信息
     * @throws Exception 异常
     */
    List<MchntOrderInfo> selectMchntOrder(String instId, String mchntNo, String txnDate, String userId) throws Exception;

    List<PayOrderInfo> selectPayOrder(String instId, String mchntOrderId, String payType, String sysSeqNum) throws Exception;

    /**
     * 根据交易明细信息(分页)
     *
     * @param mchntNo
     * @param instId    多法人标识
     * @param mchntNo   商户号
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param userId    用户id
     * @return 交易明细信息
     * @throws Exception 异常
     */
    PageResult selectMchntOrderPage(String instId, String mchntNo, String startDate, String endDate, String userId, PageInfo pageInfo, String txnNum) throws Exception;

    /**
     * 查询商户订单根据时间分页
     *
     * @param instId       行号
     * @param mchntNo      商户号
     * @param startDate    开始时间
     * @param endDate      结束时间
     * @param userId       填写收银员的用户标识
     * @param transType    (交易类型 01正向交易  04反向交易)
     * @param payType      支付类型
     * @param txnNum       交易码
     * @param minAmt       最小金额
     * @param maxAmt       最大金额
     * @param mchntOrderId 订单号
     * @return
     * @throws Exception
     */
    List<MchntOrderInfo> selectMchntOrderGroupByDate(String instId, String mchntNo, String startDate, String endDate, String userId, String transType, String payType, String txnNum, String minAmt, String maxAmt, String mchntOrderId, String mchntType, String queryId) throws Exception;

    /**
     * 查询支付订单表数据(分页)
     *
     * @param mchntNo
     * @param instId       多法人标识
     * @param mchntNo      商户号
     * @param startDate    开始时间
     * @param endDate      结束时间
     * @param userId       填写收银员的用户标识
     * @param minAmt       最小金额
     * @param maxAmt       最大金额
     * @param mchntOrderId 订单号
     * @param transType    交易类型（P01 交易 P04 退款）
     * @param state        状态
     * @return 交易明细信息
     * @throws Exception 异常
     */
    PageResult selectPayOrderPage(String instId, String mchntNo, String startDate, String endDate, String userId, PageInfo pageInfo, String payType, String minAmt, String maxAmt, String mchntOrderId, String transType, String state, String mchntType, String queryId) throws Exception;

    /**
     * 查询支付订单表
     *
     * @param mchntOrderId
     * @param mchntOrderId 商户订单号
     * @param transStatus
     * @return 支付信息 交易状态
     * @throws Exception 异常
     */
    List<PayOrderInfo> selectPayOrderByMchntNoAndtransStatus(String instId, String mchntOrderId, String transStatus) throws Exception;

    /**
     * 根据系统流水号查询支付订单信息
     *
     * @param instId    多法人标识
     * @param sysSeqNum 系统流水号
     * @return 支付订单信息
     * @throws Exception 异常
     */
    List<PayOrderInfo> bspsSelectPayOrderInfoBySysSeqNum(String instId, String sysSeqNum) throws Exception;

    /**
     * 提现查询统计
     *
     * @param instId    行号
     * @param mchntNo   商户号
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param userId    填写收银员的用户标识
     * @param transType (交易类型 01正向交易  04反向交易)
     * @param payType   支付类型
     * @param txnNum    交易码
     * @return
     * @throws Exception
     */
    List<MchntOrderInfo> selectCashWithdrawalMchntOrderGroupByDate(String instId, String mchntNo, String startDate, String endDate, String userId, String transType, String payType, String txnNum) throws Exception;

    /**
     * 查询商户订单表数据
     *
     * @param instId       多法人标识
     * @param mchntNo
     * @param startDate    开始时间
     * @param endDate      结束时间
     * @param userId       填写收银员的用户标识
     * @param minAmt       最小金额
     * @param maxAmt       最大金额
     * @param mchntOrderId 订单号
     * @param transType    交易类型（P01 交易 P04 退款）
     * @param state        状态
     * @return 交易明细信息
     * @throws Exception 异常
     */
    List<MchntOrderInfo> selectPayOrderDownload(String instId, String mchntNo, String startDate, String endDate, String userId, String payType, String minAmt, String maxAmt, String mchntOrderId, String transType, String state, String mchntType, String queryId) throws Exception;

    /**
     * 根据业务产品代码及交易分组查询交易配置信息
     *
     * @param txnNum  内部交易码
     * @param bizType 业务细分
     * @return 交易配置信息
     * @throws Exception 异常
     */
    List<TxnCfg> selectTxnCfgByBizType(String txnNum, String bizType) throws Exception;
}

